#pragma once

#include <memory>

namespace nanobdd {

class Node {
 public:
  Node() = default;
  Node(int level, Node* low, Node* high)
      : level_(level), low_(low), high_(high) {}

  bool
  isLeaf() {
    if (low_ == nullptr) {
      return true;
    }
    return false;
  }

  auto&
  level() {
    return level_;
  }
  auto
  low() {
    return low_;
  }
  auto
  high() {
    return high_;
  }
  // auto value() { return value_; }
  // void value(bool val) { value_ = val; }
  // auto hash() { return hash_; }
  // void hash(uint32_t h) { hash_ = h; }

  int level_;
  Node* low_;
  Node* high_;
  // bool value_; // for leaf nodes
  // uint32_t hash_;
};

} // namespace nanobdd